// 翻页需求

// v1 冗余
var dom = null,         // 缓存创建的新闻标题元素
  pager = 0,            // 当前页数
  num = 5,              // 每页显示新闻数目
  i = 0,                // 创建新闻元素时保存变量
  len = article.length; // 新闻数据长度

for (; i < len; i++) {
  dom = document.createElement('div');   // 创建包装新闻标题元素
  dom.innerHTML = article[i];            // 向元素中添加新闻标题
  if (i >= num) {                        // 默认显示第一页
    dom.style.display = 'none';          // 超出第一页新闻隐藏
  }
  document.getElement('container').appendChild(dom); // 添加到页面中
}
// 下一页绑定事件
document.getElementById('next_page').onclick = function() {
  var div = document.getElementById('container').getElementsByTagName('div'),
  // 获取所有新闻标题包装元素
  j = k = n = 0;  // j, k 循环变量，n 当前页显示的第一个新闻序号
  n = ++pager % Math.cell(len / num) * num; // 获取当前页显示的第一个新闻序号
  for(; j < len; j++) {
    div[j].style.display = 'none';        // 隐藏所有新闻
  }
  for (; k < 5; k++) {
    if (div[n + k]) {
      div[n + k].style.display = 'block'; // 显示当前页新闻
    }
  }
}


// v2 享元模式
// 享元类
var FlyWeight = function() {
  // 已创建的元素
  var created = [];
  // 创建一个新闻包装容器
  function created() {
    var dom = document.createElement('div');
    // 将容器插入新闻队列容器中
    document.getElementById('container').appendChild(dom);
    // 缓存新创建的元素
    created.push(dom)
    // 返回创建的新元素
    return dom;;
  }
  return {
    // 获取创建新闻元素方法
    getDiv() {
      // 如果已创建的元素小于当前页元素总个数，则创建
      if (created.length < 5) {
        return created();
      } else {
        // 获取第一个元素，并插入最后面
        var div = created.shift();
        created.push(div);
        return div;
      }
    }
  }
}();

var pager = 0,
    num = 5,
    len = article.length;
// 添加 5 条新闻
for(var i = 0; i < 5; i++) {
  if (article[i]) {
    // 通过享元类获取创建的元素并写入新闻内容
    FlyWeight.getDiv().innerHTML = article[i];
  }
}
// 下一页绑定事件
document.getElementById('next_page').onclick = function() {
  // 如果新闻内容不足 5 条则返回
  if (article.length < 5) return;
  var n = ++pager * num % len,  // 获取当前页的第一条新闻索引
      j = 0;                    // 循环变量
  // 插入 5 条新闻
  for (; j < 5; j++) {
    // 如果存在第 n + j 条则插入
    if (article[n + j]) {
      FlyWeight.getDiv().innerHTML = article[n + j];
    // 否则插入起始位置第 n + j - len 条
    } else if (article[n + j - len]) {
      FlyWeight.getDiv().innerHTML = article[n + j - len];
    // 如果都不存在则插入空串
    } else {
      FlyWeight.getDiv().innerHTML = '';
    }
  }
}



